import android.os.Bundle;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        webView = findViewById(R.id.webView);
        initWebView();
        // 加载本地HTML文件
        webView.loadUrl("file:///android_asset/index.html");
        // 或者加载网络HTML
        // webView.loadUrl("https://example.com");
    }

    private void initWebView() {
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setAllowFileAccess(true);
        settings.setDomStorageEnabled(true);

        // 添加JavaScript接口，命名为Android，H5中通过window.Android访问
        webView.addJavascriptInterface(new JSInterface(), "Android");

        webView.setWebViewClient(new WebViewClient());
        webView.setWebChromeClient(new WebChromeClient());
    }

    // JavaScript接口类，用于H5调用Android方法
    class JSInterface {
        @JavascriptInterface
        public void receiveMessageFromH5(String message) {
            // 在主线程中更新UI
            runOnUiThread(() -> {
                // 处理从H5传来的消息
                System.out.println("收到H5消息: " + message);
                // 可以在这里更新UI或执行其他操作
                
                // 向H5发送响应
                sendMessageToH5("已收到消息: " + message);
            });
        }
    }

    // 向H5发送消息
    private void sendMessageToH5(String message) {
        // 调用H5中的JavaScript函数
        webView.evaluateJavascript("javascript:receiveMessageFromAndroid('" + message + "')", null);
    }

    @Override
    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            super.onBackPressed();
        }
    }
}    